﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using Insifo.BE;
using Insifo.BE.Gen;
using Insifo.BE.Seg;
using Insifo.DL;
using Insifo.DL.Seg;
using Insifo.DL.Gen;
using Insifo.BL.Gen;

namespace Insifo.BL.Gen
{
    public class BLGrupoReporte 
    {
        //Objeto transaccion
        DLTransactionMng _transaccion = null;

        //Instancias
        DLGrupoReporte _dlGrupoReporte = new DLGrupoReporte();
        DLReporte _DLReporte = new DLReporte();

        private DLGrupoReporte _dl = new DLGrupoReporte();

        /// <summary>
        /// Método extrae los Grupos de Reportes
        /// </summary>
        /// <returns>Devuelve un DataSet</returns>
        
        public DataSet Listar(BEGrupoReporte pbe)
        {
            return _dlGrupoReporte.Listar(pbe);
        }

        /// <summary>
        /// Método que obtiene un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEGrupoReporte Obtener(BEGrupoReporte pbe)
        {
            //return _dl.Obtener(pbe);

            BEGrupoReporte beRe = new BEGrupoReporte();
            beRe = _dlGrupoReporte.Obtener(pbe);

            //Obtiene los Conceptos
            BEReporte beReporte = new BEReporte();
            beReporte.IdGrupoReporte = pbe.IdGrupoReporte;
            
            return beRe;
        }

        /// <summary>
        /// Método que inserta un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEGrupoReporte Insertar(BEGrupoReporte pbe)
        {
            //return _dl.Insertar(pbe);
            BEGrupoReporte beRe = new BEGrupoReporte();
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dlGrupoReporte.Transaction = _transaccion;
                _DLReporte.Transaction = _transaccion;
              
                //Valores definidos
                beRe.Codigo = "";

                beRe = _dlGrupoReporte.Insertar(pbe);

                //Insertar el Detalle
                if (pbe.Reportes != null)
                {
                    foreach (BEReporte be in pbe.Reportes)
                    {
                       be.IdGrupoReporte = beRe.IdGrupoReporte;
                        _DLReporte.Insertar(be);
                    }
                }
                
                //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return beRe;
        }

        /// <summary>
        /// Método que actualiza un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEGrupoReporte Actualizar(BEGrupoReporte pbe)
        {
            //return _dl.Actualizar(pbe);
            BEGrupoReporte beGrupoReporte = new BEGrupoReporte();
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dlGrupoReporte.Transaction = _transaccion;
                _DLReporte.Transaction = _transaccion;
                

                //Valores definidos
                beGrupoReporte.Codigo = "";

                beGrupoReporte = _dlGrupoReporte.Actualizar(pbe);

                //Actualiza el Detalle
                if (pbe.Reportes != null)
                {
                    foreach (BEReporte be in pbe.Reportes)
                    {
                       be.IdGrupoReporte = pbe.IdGrupoReporte;
                        _DLReporte.Modificar(be);
                    }
                }
               
                //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return beGrupoReporte;
        }

        /// <summary>
        /// Método que elimina logicamente un objeto
        /// </summary>
        /// <returns>Devuelve un Objeto</returns>
        public BEGrupoReporte Eliminar(BEGrupoReporte pbe)
        {
            //return _dl.Eliminar(pbe);
            BEGrupoReporte beGrupoReporte = new BEGrupoReporte();
            _transaccion = DLTransactionMng.Begin();
            try
            {
                _dlGrupoReporte.Transaction = _transaccion;
                _DLReporte.Transaction = _transaccion;
              
                beGrupoReporte = _dlGrupoReporte.Eliminar(pbe);

                //Culmina la transaccion
                _transaccion.Commit();
            }
            catch (Exception e)
            {
                //Cancela la transaccion
                _transaccion.RollBack();
                throw e;
            }
            finally
            {
                _transaccion.Dispose();
            }
            return beGrupoReporte;
        }

    }

   
}
